/*//////////////////////////*/
/*//////////////////////////*/
/*/    JQuery IMAGEFIT     /*/
/*/         1.0.0          /*/
/*/       by Periplo       /*/
/*//////////////////////////*/
/*//////////////////////////*/
(function( $ ) {
  $.fn.imagefit = function(options) {
		//Default setting
		var opts = $.extend({}, $.fn.imagefit.defaults, options);

		//Public vars
		var html = $('html');
		html.data('main', this);
		html.data('mode', opts.mode);
		html.data('hor', opts.halign);
		html.data('ver', opts.valign);
		html.data('force', opts.force);

		//Private vars
		var mw = html.data('main').width();
		var mh = html.data('main').height();
		var nw = 0, nh = 0;
		var imgs = 0;

		//Container CSS
		//html.data('main').css('overflow', 'hidden');
		//html.data('main').css('position', 'relative');

		//Look for imgs
		html.data('main').find('img').each(function() {
			var img = $(this);
				img.css('position', 'absolute');
			var iw = $(this).width();
			var ih = $(this).height();
			var top = 0;
			var left = 0;
			var ratio = 1;
			var size = [];
			++imgs;
			$("<img/>").attr("src", img.attr('src')).load(function() {
				size['w'] = this.width;
				size['h'] = this.height;
				ratio = size['w'] / size['h'];
				if(html.data('mode') == 'outside') {
					if (mw / mh > iw / ih) {
						if(html.data('force') === false && (mw > size['w'] || mh > size['h'])) {
							nw = size['w'];
							nh = size['h'];
							top = Math.round((mh-nh)/2);
							if(html.data('hor') == 'left') {
								left = 0;
							}
							else if (html.data('hor') == 'right') {
								left = left = Math.round(((mw-nw)/2)*2);
							}
							else {
								left = Math.round((mw-nw)/2);
							}
						}
						else {
							nw = mw;
							nh = Math.round((nw * ih) / iw);
							top = -Math.abs(Math.round((nh-mh)/2));
						}
						if(html.data('ver') == 'top') {
							img.css('top', '0'); img.css('left', left+'px');
						}
						else if(html.data('ver') == 'bottom') {
							img.css('top', (top*2)+'px'); img.css('left', left+'px');
						}
						else {
							img.css('top', top+'px'); img.css('left', left+'px');
						}
					}
					else {
						if(html.data('force') === false && (mw > size['w'] || mh > size['h'])) {
							nw = size['w'];
							nh = size['h'];
							top = Math.round((mh-nh)/2);
							left = Math.round((mw-nw)/2);
						}
						else {
							nh = mh;
							nw = Math.round((nh * iw) / ih);
							left = -Math.abs(Math.round((nw-mw)/2));
						}
						if(html.data('hor') == 'left') {
							img.css('top', top+'px'); img.css('left', '0');
						}
						else if(html.data('hor') == 'right') {
							img.css('left', (left*2)+'px'); img.css('top', top+'px');
						}
						else {
							img.css('left', left+'px'); img.css('top', top+'px');
						}
					}
					img.width(nw);
					img.height(nh);
					img.css('width', nw);
					img.css('height', nh);
				}
				else if(html.data('mode') == 'inside') {
					if (mw / mh > iw / ih) {
						if(html.data('force') === false && mw > size['w'] && mh > size['h']) {
							nw = size['w'];
							nh = size['h'];
							top = Math.round((mh-nh)/2);
							left = Math.round((mw-nw)/2);
						}
						else {
							nh = mh;
							nw = Math.round((nh * iw) / ih);
							left = Math.round((mw-nw)/2);
						}
						img.css('left', left+'px');  img.css('top', top+'px');
						if(html.data('hor') == 'left') {
							img.css('left', '0');
						}
						if(html.data('ver') == 'top') {
							img.css('top', '0');
						}
						if(html.data('hor') == 'right') {
							img.css('left', (left*2)+'px');
						}
						if(html.data('ver') == 'bottom') {
							img.css('top', (top*2)+'px');
						}
					}
					else {
						if(html.data('force') === false && mw > size['w'] && mh > size['h']) {
							nw = size['w'];
							nh = size['h'];
							top = Math.round((mh-nh)/2);
							left = Math.round((mw-nw)/2);
						}
						else {
							nw = mw;
							nh = Math.round((nw * ih) / iw);
							top = Math.round((mh-nh)/2);
						}
						img.css('left', left+'px');  img.css('top', top+'px');
						if(html.data('hor') == 'left') {
							img.css('left', '0');
						}
						if(html.data('ver') == 'top') {
							img.css('top', '0');
						}
						if(html.data('hor') == 'right') {
							img.css('left', (left*2)+'px');
						}
						if(html.data('ver') == 'bottom') {
							img.css('top', (top*2)+'px');
						}
					}
					img.width(nw); img.height(nh);
					img.css('width', nw); img.css('height', nh);
				}
				else {}
			});
			
		});
		console.log('imageFit found '+imgs+' images.');
	};
	$.fn.imagefit.defaults = {
		mode	: 'outside',	//内部、外部定位: 'inside' or 'outside'.
		halign	: 'center', 	//水平方向定位: 'left', 'center' or 'right'.
		valign	: 'middle', 	//垂直方向定位: 'top', 'middle' or 'bottom'.
		force	: true, 		//强制大小
	};
})( jQuery );